package week7.jsjf;

import org.jetbrains.annotations.NotNull;
import week4.jsjf.ListADT;
import week4.jsjf.OrderedListADT;

import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;

/**
 * BinarySearchTreeList represents an ordered list implemented using a binary
 * search tree.
 * 
 * @author Lewis and Chase
 * @version 4.0
 */
public class BinarySearchTreeList<T> extends LinkedBinarySearchTree<T> implements ListADT<T>, OrderedListADT<T>, Iterable<T>
{
    /**
     * 创建一个空的 BinarySearchTreeList.
     */
     public BinarySearchTreeList()
    {
        super();
    }

    /**
     * 向列表中
     * 
     * @param element 被添加到列表中的元素
     */
    @Override
    public void add(T element)
    {
        addElement(element);
    }
    
    /**
     * 移除并返回第一个元素.
     *
     * @return 列表中的元素
     */
    @Override
    public T removeFirst()
    {
        return removeMin();
    }
    
    /**
     * 删除并返回列表中的最后一个元素
     *
     * @return 列表中的最后一个元素
     */
    @Override
    public T removeLast()
    {
        return removeMax();
    }

   /**
    * 删除并返回列表中的指定元素
    *
    * @param element 在列表中被搜索的元素
    * @return 列表中与指定元素匹配的元素
    */
    @Override
    public T remove(T element)
    {
        return removeElement(element);
    }

   /**
    * 返回列表第一个元素的引用】【
    * ‘
    *
    * @return a reference to the first element in the list
    */
    @Override
    public T first()
    {
        return findMin();
    }

   /**
    * Returns a reference to the last element on this list.
    *
    * @return a reference to the last element in the list
    */
    @Override
    public T last()
    {
        return findMax();
    }

   /**
    * Returns an iterator for the list.
    *
    * @return an iterator over the elements in the list
    */
    @Override
    @NotNull
    public Iterator<T> iterator()
    {
        return iteratorInOrder();
    }

    @Override
    public void forEach(Consumer<? super T> action) {

    }

    @Override
    public Spliterator<T> spliterator() {
        return null;
    }
}

